package com.newlink.building.main.ui

import android.content.Intent
import android.view.View
import com.alibaba.android.arouter.facade.annotation.Route
import com.newlink.building.common_base.base.NL_BaseActivity
import com.newlink.building.common_base.constant.Base_RouterPath
import com.newlink.building.common_base.ext.showToast
import com.newlink.building.common_base.widget.CustomInputDialog
import com.newlink.building.main.R
import com.newlink.building.main.databinding.ActivityDeviceSettingBinding

/**
 * @Author: xiaodong
 * @Date: 2022/10/5
 * @Description: 设备设置界面，提供设备名称、MAC地址、位置等信息的修改，以及移动侦测、日志导出、清除缓存和解绑设备等功能。
 */
@Route(path = Base_RouterPath.PATH_DEVICE_SETTING)
class Module_Main_DeviceSettingActivityNL : NL_BaseActivity(), View.OnClickListener {

    // 视图绑定实例
    private lateinit var binding: ActivityDeviceSettingBinding

    /**
     * 绑定布局文件并返回根视图。
     */
    override fun attachLayoutRes(): View {
        binding = ActivityDeviceSettingBinding.inflate(layoutInflater)
        return binding.root
    }

    /**
     * 初始化数据。
     * 可以在这里加载设备的当前设置，例如设备名称、MAC、位置等。
     */
    override fun initData() {
        // Example: Fetch actual device data and update UI elements here
        // For demonstration, let's assume we load some initial values
        binding.tvDeviceNameHint.text = "My Smart Device" // Placeholder
        binding.tvDeviceMacHint.text = "AB:CD:EF:12:34:56" // Placeholder
        binding.tvDeviceLocationHint.text = "Living Room" // Placeholder

        // Set isPrimaryAccount based on actual user account type
        // isPrimaryAccount = SomeDataManager.isPrimaryUser()
    }

    /**
     * 初始化视图组件和设置监听器。
     */
    override fun initView() {
        // 根据是否是主账号决定解绑按钮的可见性
        binding.unbindDevice.visibility = if (isPrimaryAccount) View.VISIBLE else View.GONE

        // 设置标题栏文本
        binding.layoutTittlebar.titleCenterTitlebar.text = getString(R.string.device_setting_title)

        // 设置所有点击事件监听器
        setClickListeners()
    }

    /**
     * 设置所有可点击视图的监听器。
     */
    private fun setClickListeners() {
        binding.layoutTittlebar.backTitlebar.setOnClickListener(this)
        binding.rlDeviceName.setOnClickListener(this)
        binding.rlDeviceMac.setOnClickListener(this)
        binding.rlDeviceLocation.setOnClickListener(this)
        binding.rlMoveDetection.setOnClickListener(this)
        binding.rlExportLog.setOnClickListener(this)
        binding.rlClearCache.setOnClickListener(this)
        binding.unbindDevice.setOnClickListener(this)
    }

    /**
     * 处理所有点击事件。
     * @param v 被点击的视图。
     */
    override fun onClick(v: View) {
        when (v.id) {
            R.id.back_titlebar -> finish() // 返回按钮，结束当前 Activity
            R.id.unbind_device -> showToast(getString(R.string.unbind_device_failed)) // 解绑设备功能提示
            R.id.rl_device_name -> showCustomInputDialog(
                getString(R.string.device_name),
                CustomInputDialog.TYPE_DEVICE_NAME
            )

            R.id.rl_device_mac -> showCustomInputDialog(
                getString(R.string.device_mac),
                CustomInputDialog.TYPE_DEVICE_MAC
            )

            R.id.rl_device_location -> showCustomInputDialog(
                getString(R.string.device_location),
                CustomInputDialog.TYPE_DEVICE_LOCATION
            )

            R.id.rl_move_detection -> startActivity(
                Intent(
                    this,
                    Module_Main_MoveDetectingActivityNL::class.java
                )
            ) // 跳转到移动侦测设置
            R.id.rl_export_log -> startActivity(
                Intent(
                    this,
                    Module_Main_LogExportActivityNL::class.java
                )
            ) // 跳转到日志导出界面
            R.id.rl_clear_cache -> showToast(getString(R.string.device_setting_clear_cache)) // 清除缓存功能提示
        }
    }

    /**
     * 显示自定义输入对话框，用于修改设备相关信息。
     * @param title 对话框的标题。
     * @param type 输入类型，对应 CustomInputDialog 中的常量。
     */
    private fun showCustomInputDialog(title: String, type: Int) {
        val customInputDialog = CustomInputDialog(this)
        customInputDialog.setTitle(title).setType(type)
            .setNegativeButton(listener = object : CustomInputDialog.OnClickListener {
                override fun onClick(type: Int, inputText: String) {
                    customInputDialog.dismiss() // 取消按钮，关闭对话框
                }
            })
            .setPositiveButton(listener = object : CustomInputDialog.OnClickListener {
                override fun onClick(type: Int, inputText: String) {
                    // 根据输入类型更新对应的文本视图
                    when (type) {
                        CustomInputDialog.TYPE_DEVICE_NAME -> binding.tvDeviceNameHint.text =
                            inputText

                        CustomInputDialog.TYPE_DEVICE_MAC -> binding.tvDeviceMacHint.text =
                            inputText

                        CustomInputDialog.TYPE_DEVICE_LOCATION -> binding.tvDeviceLocationHint.text =
                            inputText
                    }
                    customInputDialog.dismiss() // 确定按钮，关闭对话框
                    // 实际项目中，这里通常会调用Presenter或ViewModel来保存更改到数据层
                    // e.g., presenter?.updateDeviceSetting(type, inputText)
                }
            })
        customInputDialog.show()
    }
}